﻿//////////////////////////////////////////////////////////////////////////////
//
//  Copyright © 1998-2024 Glodon Company Limited.  All rights reserved.
//
//  Use of this software is subject to the terms of the Glodon license
//  agreement provided at the time of installation or download, or which
//  otherwise accompanies this software in either electronic or hard copy form.  
//
//////////////////////////////////////////////////////////////////////////////

// Reviewed
#pragma once
#include "GcmpDevService.h"
#include "OwnerPtr.h"
#include "GcmpApiDeclaration.h"

namespace gcmp
{
    /// \brief 应用程序级配置用户偏好
    class GCMP_DEV_SERVICE_EXPORT IApplicationUserOptions
    {
    public:
        /// \brief 获取Gcmp应用程序级用户配置用户偏好
        static IApplicationUserOptions* Get(); 

        /// \brief 获取项目文件默认路径
        /// \return 用户项目文件路径
        virtual std::wstring GetDefaultProjectFilePath() const = 0;

        /// \brief 设置项目文件默认路径
        /// \param defaultProjectPath 项目文件默认路径
        /// \return true 设置成功，false设置失败
        virtual bool SetDefaultProjectFilePath(const std::wstring& defaultProjectPath) = 0;

        /// \brief 获取项目文件最近保存位置（一般用于保存推荐上次位置，没有则推荐delault路径）
        /// \return 用户上次保存文件路径
        virtual const std::wstring& GetLastSavePath() const = 0;

        /// \brief 设置项目文件最近保存位置(一般用于保存推荐上次位置，没有则推荐delault路径）
        /// \param lastPath 近保存位置
        /// \return 返回true成功，否则失败
        virtual bool SetLastSavePath(const std::wstring& lastPath) = 0;

        /// \brief 获取项目自动保存时间间隔
        /// \return 自动保存时间间隔分钟数
        virtual int GetAutoSaveInterval() const = 0;

        /// \brief 设置项目自动保存时间间隔
        /// \param minutes 间隔分钟数
        virtual bool SetAutoSaveInterval(int minutes) = 0;

        /// \brief 获取是否支持略过高亮
        /// \return true支持略过高亮，false相反
        virtual bool IsHoverHighlightEnabled() const = 0;

        /// \brief 设置启用或者关闭略过高亮
        /// \param isHoveringHighlight 设置true(启用)或false(关闭)略过高亮
        virtual void EnableHoverHighlight(bool isHoveringHighlight) = 0;

        GCMP_OBSOLETE_API(2022 / 03 / 01, IApplicationUserOptions::EnabledLineEndRound(bool)) virtual void EnabledLineEndRoundInOpenGL(bool isLineEndRoundEnabled) = 0;
        GCMP_OBSOLETE_API(2022 / 03 / 01, IApplicationUserOptions::IsLineEndRoundEnabled()) virtual bool IsLineEndRoundEnabledInOpenGL() const = 0;

        /// \brief 设置启用或者关闭线两端补圆头
        /// \param isSegmentCircleEdge 设置true(启用)或false(关闭)补圆头
        virtual void EnabledLineEndRound(bool isLineEndRoundEnabled) = 0;

        /// \brief 获取是否支持补圆头
        /// \return true支持补圆头，false相反
        virtual bool IsLineEndRoundEnabled() const = 0;

        ////Document 打开成功添加当前文档名称
        //virtual void AddOpenedFile(std::wstring fullpath) = 0;

        ////Document 打开成功添加当前文档名称
        //virtual void RemoveOpenedFile(std::wstring fullpath) = 0;


        ////清理所有打开文档记录
        //virtual void Clear() = 0;

        ////根据bak，获取异常退出文件
        //virtual void GetOpenedFiles(std::list<std::wstring>& files) = 0;

        ////仅保存打开文档记录
        ////读取当前已存UserOptions，仅更新打开文档记录
        //virtual bool SaveOpenFileRecords() = 0;

    public:
        /// \brief 析构函数
        virtual ~IApplicationUserOptions() {}
    };
}//namespace gcmp

